package control.board;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.board.BoardReplyVO;
import model.board.FreeBoardService;
import model.board.FreeBoardVO;
import model.board.NoticeBoardService;
import model.board.NoticeBoardVO;
import model.board.QnaBoardService;
import model.board.QnaBoardVO;
import model.board.paging.Board_ListVO;
import model.board.paging.CommonConstants;
import model.board.paging.ListVO;
import model.member.MemberVO;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class BoardContoller extends MultiActionController{
	private FreeBoardService freeBoardService;
	private NoticeBoardService noticeBoardService;
	private QnaBoardService qnaBoardService;
	
	public BoardContoller() {
		super();
	}

	public BoardContoller(FreeBoardService freeBoardService,
			NoticeBoardService noticeBoardService, QnaBoardService qnaBoardService) {
		super();
		this.freeBoardService = freeBoardService;
		this.noticeBoardService = noticeBoardService;
		this.qnaBoardService = qnaBoardService;
	}
	public ModelAndView boardPage(HttpServletRequest request, HttpServletResponse response) throws Exception{
	    String page=request.getParameter("page");
	    String path="home";
		ListVO lvo=null;
		HashMap map=null;
	  if("board".equals(page)){
		  String pageNo=request.getParameter("pageNo");
		  map=freeBoardService.freeAllList(pageNo);
		
		  path="freeBoard.board";  // tiles-def-board.xml    최초에는 자유게시판을 보여줌
	    }
		return new ModelAndView(path,"map",map);
	}
	
	public ModelAndView sub_tab(HttpServletRequest request,HttpServletResponse response) throws SQLException{
		String page=request.getParameter("page");
		String path="";
		String pageNO="";
		HashMap map=null;
		if("notice".equals(page)){
			try {
				//new 띄우기 위해 map으로 lvo와 함께 받아옴.
				map=noticeBoardService.noticeAllList(pageNO); // pageNO에 ""값을 넣는 이유는, page값 처리를  service에서 처리하기 위해
			} catch (SQLException e) {
				e.printStackTrace();
			}
			path="notice.board";
		}else if("free".equals(page)){
			String pageNo=request.getParameter("pageNo");
			try {
				map=freeBoardService.freeAllList(pageNo);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			path="freeBoard.board";
		}else if("qna".equals(page)){
			String pageNo=request.getParameter("pageNo");
			try {
				map=qnaBoardService.selectAllQna(pageNo);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			path="qna.board";
		}
		return new ModelAndView(path,"map",map);
	}
	
	
	// QnaBoard부분
	//qna게시판 게시물 상세보기 
	public ModelAndView showContent(HttpServletRequest request,HttpServletResponse response,HttpSession session, QnaBoardVO vo) throws SQLException{
	  QnaBoardVO bvo=null;
	  String bno=null;
	  HashMap map2=null;
	  int bno1=0;
	  HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
	  //로그인이 되어있지 않으면 다시 qna페이지로..
	  if(map==null){
		  map2=qnaBoardService.selectAllQna(null);
		  return new ModelAndView("qna.board","map",map2);
	  }
	  MemberVO mvo=(MemberVO) map.get("mvoLogin");
	  String ide=mvo.getM_id();
	  String id2=request.getParameter("mid");
	  String bno2=request.getParameter("bno");
	  bno=request.getParameter("bno");
	  bno1=Integer.parseInt(bno);
	  if(ide.equals(id2)||mvo.getM_type().equals("a")){
		  if(!ide.equals(id2)){
			  bvo=qnaBoardService.showContent(bno1);
			  List list=qnaBoardService.selectAllReply(bno1);
			  request.setAttribute("list", list);
			  return new ModelAndView("qnaShowContent.board","bvo",bvo);
		  }
		  	bvo=qnaBoardService.showContentNoCnt(bno1);
		  	List list=qnaBoardService.selectAllReply(bno1);
		  	request.setAttribute("list", list);
		  	return new ModelAndView("qnaShowContent.board","bvo",bvo);
		 }
		  String pageNo=request.getParameter("pageNo");
		  map2 = qnaBoardService.selectAllQna(pageNo);
		  return new ModelAndView("qna.board","map",map2);
	}
		/** 게시판, 묻고답하기 클릭시 페이지전환*/
		public ModelAndView qnaWritePage(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws SQLException{
			return new ModelAndView("qnaWrite.board");
		}
		/**
		 * qna게시판 글등록
		 */
		public ModelAndView writeQna(HttpServletRequest request,HttpServletResponse response,HttpSession session,QnaBoardVO bvo) throws IllegalStateException{
			String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
			HashMap map2=null;
			File copyFile=null;
			String pageNo=request.getParameter("pageNo");
			HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
			MemberVO mvo=(MemberVO) map.get("mvoLogin");
			String id=mvo.getM_id();
			String name=mvo.getM_name();
			bvo.setM_id(id);
			bvo.setB_writer(name);
			MultipartFile mfile=bvo.getUploadFile();
			if(mfile.isEmpty()==false){
				String fileName=mfile.getOriginalFilename();	
				//jsp에서 넘겨받은 파일의 이름을 Orgfilename에 저장시킨다.
				bvo.setOrgfilename(fileName);
				String newfilename=System.currentTimeMillis()+"_"+fileName;
				//시스템의 시간과 파일이름을 합쳐 새로운 이름을 만든어 새로운 파일 이름을 만든다.
				bvo.setNewfilename(newfilename);
				copyFile=new File(path+newfilename);
				try {
					mfile.transferTo(copyFile);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		try {
			qnaBoardService.writeQna(bvo);
			map2=qnaBoardService.selectAllQna(pageNo);
		} catch (SQLException e) {
			e.printStackTrace();
		}		
			return new ModelAndView("qna.board","map",map2);
		}
		//게시물 삭제(시퀀스번호로 삭제)
			public ModelAndView deleteContent(HttpServletRequest request,HttpServletResponse response, QnaBoardVO vo) {
				HashMap map=null;
				int bno=vo.getB_no();
				try {
					qnaBoardService.deleteContent(bno);
					String pageNo=request.getParameter("pageNo");
					map=qnaBoardService.selectAllQna(pageNo);
				} catch (SQLException e) {
					e.printStackTrace();
				}
				return new ModelAndView("qna.board","map",map);
			}
			//게시물 업데이트
			//jsp에서 바뀐 정보만 가져오고 session의 값으로 나머지 값을 주입시켜 vo를 완성후 업데이트?
			public ModelAndView updateContentPage (HttpServletRequest request,HttpServletResponse response,HttpSession session, QnaBoardVO vo) throws Exception{
				String bno=request.getParameter("bno");
				int no=Integer.parseInt(bno);
				QnaBoardVO bvo=qnaBoardService.showContent(no);
				return new ModelAndView("qnaUpdate.board","bvo",bvo);
			}
			
			//수정시 올린파일을 삭제
			public ModelAndView deleteFile(HttpServletRequest request,HttpServletResponse response) throws Exception{
				String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
				String newfilename=request.getParameter("newfilename");
				if(newfilename!=null||!newfilename.equals("")){
					qnaBoardService.deleteFile(path+newfilename);
				}		
				return new ModelAndView("JsonView");
			}
			//링크되어있는 파일 다운로드
			public ModelAndView fileDownload(HttpServletRequest request,HttpServletResponse response,HttpSession session, QnaBoardVO vo ){
				String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
				HashMap map=new HashMap();
				map.put("path", path);
				return new ModelAndView("downloadView",map);
			}
			/**  상세보기시에 목록으로 돌아가는 메서드* */
			public ModelAndView findAllQnaforPaging(HttpServletRequest request, HttpServletResponse response){
				String pageNo=request.getParameter("pageNo");
				HashMap map=null;
				try {
					map = qnaBoardService.selectAllQna(pageNo);
				} catch (SQLException e) {
					e.printStackTrace();
				}
				return new ModelAndView("qna.board","map",map);
			}  
			
			//Qna 리플쓸때 그 페이지를 보여준다.
			public ModelAndView QnaReplyView(HttpServletRequest request,HttpServletResponse response,HttpSession session, QnaBoardVO vo ) throws SQLException{
				System.out.println("control QnaReplyView 시작");
				String no=request.getParameter("bno");
				int bno = Integer.parseInt(no);
				QnaBoardVO qbo=qnaBoardService.showContentNoCnt(bno);
				return new ModelAndView("qnaReply.board","bvo",qbo);
			}		
			//Qna 리플작성후 저장
			public ModelAndView qnaReply(HttpServletRequest request,HttpServletResponse response,HttpSession session, QnaBoardVO qvo ){
				ListVO lvo=null;
				QnaBoardVO bv=null;
				HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
				MemberVO mvo=(MemberVO) map.get("mvoLogin");
				String id=mvo.getM_id();
				qvo.setM_id(mvo.getM_id());
				qvo.setB_writer(mvo.getM_name());
				try {
					int num=qnaBoardService.qnaReplyWrite(qvo);
					bv=qnaBoardService.showContentNoCnt(num);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return new ModelAndView("qnaShowContent.board","bvo",bv);
			}
			//게시판에 리플 작성시 insert
			public ModelAndView boardReply(HttpServletRequest request,HttpServletResponse response, HttpSession session, BoardReplyVO brvo){
				System.out.println("리플 저장메서드 시작!");
				QnaBoardVO bvo=null;
				HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
				MemberVO mvo=(MemberVO) map.get("mvoLogin");
				String id=mvo.getM_id();
				String name=mvo.getM_name();
				brvo.setM_id(id);
				brvo.setM_name(name);
				int bno1=brvo.getB_no();
				if(mvo.getM_type().equals("b")){
					brvo.setM_type("b");
				}else{
					brvo.setM_type("a");
				}
				try {
					qnaBoardService.insertReply(brvo);
					List list=qnaBoardService.selectAllReply(bno1);
					request.setAttribute("list", list);
					bvo=qnaBoardService.showContentNoCnt(bno1);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}			
				return new ModelAndView("qnaShowContent.board","bvo",bvo);
			}
			
			//리플삭제
			public ModelAndView delReply(HttpServletRequest request,HttpServletResponse response, HttpSession session, BoardReplyVO brvo){
				QnaBoardVO bvo=null;
				//board_no=삭제할 리플의 시퀀스번호, bno=해당게시글의 시퀀스, 얘로 리플이랑 상세보기를 가져와야되나?
				String board_no=request.getParameter("board_no");
				String bno=request.getParameter("b_no");
				int bno1=Integer.parseInt(bno);
				try {
					HashMap map=new HashMap();
					map.put("board_no", board_no);
					map.put("bno", bno1);
					qnaBoardService.delReply(map);
					bvo=qnaBoardService.showContentNoCnt(bno1);
					List list=qnaBoardService.selectAllReply(bno1);
					request.setAttribute("list", list);
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return new ModelAndView("qnaShowContent.board","bvo",bvo);
			}
			//qna게시판 검색 searchQnaText searchQnaSelect
			public ModelAndView searchQna(HttpServletRequest request,HttpServletResponse response,HttpSession session, QnaBoardVO vo) throws SQLException{
				//select부분, 즉 작성자,제목,등의 분류를 가지고 있지.
				String searchQnaSelect=request.getParameter("searchQnaSelect");
				//검색하고자하는 타이틀이나 작성자의 글을 가지고 있지.
				String searchQnaText=request.getParameter("searchQnaText");
				String pageNo=request.getParameter("pageNo");
				if("b_writer".equals(searchQnaSelect)){
					vo.setB_writer(searchQnaText);
				}else if("b_title".equals(searchQnaSelect)){
					vo.setB_title(searchQnaText);
				}
				HashMap map=new HashMap();
				map.put("bvo", vo);
				map.put("searchQnaText", searchQnaText);
				map.put("searchQnaSelect", searchQnaSelect);
				map.put("pageNo", pageNo);
				Board_ListVO lvo=qnaBoardService.searchQna(map);
				return new ModelAndView("searchQnaList.board","searchQnaList",lvo);
			}
			//qna게시글 수정시에 사용한다
			public ModelAndView qnaUpdate(HttpServletRequest request,HttpServletResponse response, QnaBoardVO bvo) throws IllegalStateException, IOException, SQLException{
				  File copyFile=null;
				  String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
				  String title=request.getParameter("b_title");
				  String content=request.getParameter("b_content");
				  String no=request.getParameter("b_no");
				  int bno=Integer.parseInt(no);
				  MultipartFile mfile=bvo.getUploadFile();//null
				  //System.out.println("control fileUpload 넘어온파일에 시간을 추가해서 다른이름으로 저장 :"+mfile.getSize()+"********"+mfile.isEmpty());
				  if(mfile!=null){
				   if(mfile.isEmpty()==false){
				    String fileName=mfile.getOriginalFilename(); 
				    //jsp에서 넘겨받은 파일의 이름을 Orgfilename에 저장시킨다.
				    bvo.setOrgfilename(fileName);
				    String newfilename=System.currentTimeMillis()+"_"+fileName;
				    //시스템의 시간과 파일이름을 합쳐 새로운 이름을 만든어 새로운 파일 이름을 만든다.
				    bvo.setNewfilename(newfilename);
				    copyFile=new File(path+newfilename);
				    mfile.transferTo(copyFile);
				   }
				  }
				   bvo.setB_title(title);
				   bvo.setB_content(content);
				   qnaBoardService.updateContent(bvo);
				   bvo=qnaBoardService.showContentNoCnt(bno); 
				  return new ModelAndView("qnaShowContent.board","bvo",bvo);
				 }
			//qna 페이지에서 관리자 접속시 select로 회원을 삭제할때
			public ModelAndView deleteContentByAdmin(HttpServletRequest request,HttpServletResponse response) throws Exception{
				HashMap map=null;
				System.out.println("deleteContentByAdmin 실행!!!!!!!");
				ListVO lvo=null;
				String bno=request.getParameter("b_no");
				int no=Integer.parseInt(bno);
				qnaBoardService.deleteContent(no);
				String pageNo=request.getParameter("pageNo");
				try {
					map=qnaBoardService.selectAllQna(pageNo);
				} catch (SQLException e) {
					e.printStackTrace();
				}
			return new ModelAndView("qna.board","map",map);
			}
	////////////////////////////////////////////////////////////////////////////////////////
	
	// FreeBoard부분
	public ModelAndView freeWriteMove(HttpServletRequest request,HttpServletResponse response){
		String command=request.getParameter("command");
		String path="";
		if(command.equals("freeWriteMove")){
			path="freeWrite.board";
		}
		return new ModelAndView(path);
	}
	/**
	 * 자유게시판 write 
	 */
	public ModelAndView freeWrite(HttpServletRequest request,HttpServletResponse response,HttpSession session,FreeBoardVO bvo) throws IllegalStateException, IOException{
		String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
		File copyFile=null;
		HashMap map2=null;
		String pageNo=request.getParameter("pageNo");
		HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
		MemberVO mvo=(MemberVO) map.get("mvoLogin");
		bvo.setM_id(mvo.getM_id());
		bvo.setB_writer(mvo.getM_name());
		MultipartFile mfile=bvo.getUploadFile();

		if(mfile.isEmpty()==false){
			String fileName=mfile.getOriginalFilename();
			//jsp에서 넘겨받은 파일의 이름을 Orgfilename에 저장시킨다. 
			bvo.setOrgfilename(fileName);
			String newfilename=System.currentTimeMillis()+"_"+fileName;
			//시스템의 시간과 파일이름을 합쳐 새로운 이름을 만든어 새로운 파일 이름을 만든다.
			bvo.setNewfilename(newfilename);
			copyFile=new File(path+newfilename);
			// 업로드..
			mfile.transferTo(copyFile);
		}
		try {
			freeBoardService.freeWrite(bvo);
			//게시글 저장후 freeBoard 메인페이지로
			map2=freeBoardService.freeAllList(pageNo);
		} catch (SQLException e) {
				e.printStackTrace();
		}		
		return new ModelAndView("freeBoard.board","map",map2);
	}
	/**
	 * 페이징
	 * */
	public ModelAndView findAllFreeforPaging(HttpServletRequest request, HttpServletResponse response){
		String pageNo=request.getParameter("pageNo");
		HashMap map=null;
		try {
			map = freeBoardService.freeAllList(pageNo);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new ModelAndView("freeBoard.board","map",map);
	} 
	
	/**
	 *	게시글 보는 메서드 
	 * @throws SQLException 
	 */
	public ModelAndView freeShowContent(HttpServletRequest request,HttpServletResponse response,HttpSession session,FreeBoardVO vo) throws SQLException{
		FreeBoardVO bvo=null;
		HashMap map2=null;
		String pageNo=request.getParameter("pageNo");
		HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
		//로그인이 되어있지 않으면 다시 free 페이지로..
		if(map==null){
			map2=freeBoardService.freeAllList(pageNo);
			return new ModelAndView("freeBoard.board","map",map2);
		}
		MemberVO mvo=(MemberVO) map.get("mvoLogin");
		String ide=mvo.getM_id();
		String id2=request.getParameter("mid");
		//작성자가 같지 않으면 다시 qna페이지로  ||mvo.getM_type().equals("a") 
			String bno=request.getParameter("bno");
			int bno1=Integer.parseInt(bno);
			if(ide.equals(id2)){
				bvo=freeBoardService.showContentNoCnt(bno1);
			}else{
				bvo=freeBoardService.showContent(bno1);
			}
			List list=freeBoardService.freeAllReply(bno1);
			request.setAttribute("list", list);
		return new ModelAndView("freeShowContent.board","bvo",bvo);
	}
	/**
	 *	파일 다운로드
	 */
	public ModelAndView freeFileDownload(HttpServletRequest request,HttpServletResponse response,HttpSession session, FreeBoardVO vo ){
		String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
		HashMap map=new HashMap();
		map.put("path", path);
		return new ModelAndView("downloadView",map);
	}
	/**
	 *	게시글 삭제
	 */
	public ModelAndView freeDeleteContent(HttpServletRequest request,HttpServletResponse response, FreeBoardVO vo) {
		HashMap map=null;
		int bno=vo.getB_no();
		try {
			freeBoardService.deleteContent(bno);
			String pageNo=request.getParameter("pageNo");
			map=freeBoardService.freeAllList(pageNo);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new ModelAndView("freeBoard.board","map",map);
	}
	/**
	 *	게시글 수정 페이지로 
	 */
	public ModelAndView freeUpdateContentPage(HttpServletRequest request,HttpServletResponse response, FreeBoardVO vo) throws SQLException{
		String bno=request.getParameter("bno");
		int no=Integer.parseInt(bno);
		FreeBoardVO bvo=freeBoardService.showContentNoCnt(no);
		return new ModelAndView("freeUpdate.board","bvo",bvo);
	}
	/**
	 *	게시글 수정 
	 */
	public ModelAndView freeUpdate(HttpServletRequest request,HttpServletResponse response, FreeBoardVO bvo) throws IllegalStateException, IOException, SQLException{
		File copyFile=null;
		String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
		String title=request.getParameter("b_title");
		String content=request.getParameter("b_content");
		String no=request.getParameter("b_no");
		int bno=Integer.parseInt(no);
		MultipartFile mfile=bvo.getUploadFile();//null
		//System.out.println("control fileUpload 넘어온파일에 시간을 추가해서 다른이름으로 저장 :"+mfile.getSize()+"********"+mfile.isEmpty());
		if(mfile!=null){
			if(mfile.isEmpty()==false){
				String fileName=mfile.getOriginalFilename();	
				//jsp에서 넘겨받은 파일의 이름을 Orgfilename에 저장시킨다.
				bvo.setOrgfilename(fileName);
				String newfilename=System.currentTimeMillis()+"_"+fileName;
				//시스템의 시간과 파일이름을 합쳐 새로운 이름을 만든어 새로운 파일 이름을 만든다.
				bvo.setNewfilename(newfilename);
				copyFile=new File(path+newfilename);
				mfile.transferTo(copyFile);
			}
		}
			bvo.setB_title(title);
			bvo.setB_content(content);
			freeBoardService.freeUpdateContent(bvo);
			bvo=freeBoardService.showContentNoCnt(bno); 
			
			List list=freeBoardService.freeAllReply(bno);
			request.setAttribute("list", list);
			
		return new ModelAndView("freeShowContent.board","bvo",bvo);
	}
	/**
	 * 수정시 올린 파일 삭제
	 */
	public ModelAndView freeDeleteFile(HttpServletRequest request,HttpServletResponse response) throws Exception{
		String path="C:\\java-ohbu\\server\\ohbu-tomcat\\webapps\\upload\\board\\";
		String newfilename=request.getParameter("newfilename");
		if(newfilename!=null||!newfilename.equals("")){
			freeBoardService.freeDeleteFile(path+newfilename);
		}		
		return new ModelAndView("JsonView");
	}
	/**
	 * 답글작성 페이지로 이동
	 */
	public ModelAndView FreeReplyView(HttpServletRequest request,HttpServletResponse response,HttpSession session, FreeBoardVO vo ) throws SQLException{
		String no=request.getParameter("bno");
		int bno = Integer.parseInt(no);
		FreeBoardVO fvo=freeBoardService.showContentNoCnt(bno);
		return new ModelAndView("freeReply.board","bvo",fvo);
	}
	/**
	 * 답글작성 후 저장 freeReply
	 */
	public ModelAndView freeReply(HttpServletRequest request,HttpServletResponse response,HttpSession session, FreeBoardVO fvo ){
		System.out.println("control freeReply 실행~");
		ListVO lvo=null;
		FreeBoardVO vo=null;
		HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
		MemberVO mvo=(MemberVO) map.get("mvoLogin");
		String id=mvo.getM_id();
		fvo.setM_id(mvo.getM_id());
		fvo.setB_writer(mvo.getM_name());
		try {
			int num=freeBoardService.freeReplyWrite(fvo);
			vo=freeBoardService.showContentNoCnt(num);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new ModelAndView("freeShowContent.board","bvo",vo);
	}
	public ModelAndView freeSearch(HttpServletRequest request,HttpServletResponse response,HttpSession session, FreeBoardVO vo) throws SQLException{
		//select부분, 즉 작성자,제목,등의 분류를 가지고 있지.
		String searchFreeSelect=request.getParameter("searchFreeSelect");
		//검색하고자하는 타이틀이나 작성자의 글을 가지고 있지.
		String searchFreeText=request.getParameter("searchFreeText");
		String pageNo=request.getParameter("pageNo");
		if("b_writer".equals(searchFreeSelect)){
			vo.setB_writer(searchFreeText);
		}else if("b_title".equals(searchFreeSelect)){
			vo.setB_title(searchFreeText);
		}
		HashMap map=new HashMap();
		map.put("bvo", vo);
		map.put("searchFreeText", searchFreeText);
		map.put("searchFreeSelect", searchFreeSelect);
		map.put("pageNo", pageNo);
		Board_ListVO lvo=freeBoardService.freeSearch(map);
		return new ModelAndView("freeSearchList.board","searchFreeList",lvo);
	}
	/**
	 * 게시글보기에서 댓글 작성하는 메서드
	 */
	public ModelAndView freeBoardReply(HttpServletRequest request,HttpServletResponse response, HttpSession session, BoardReplyVO brvo){
		HashMap map=(HashMap) session.getAttribute("loginMember"); //session에 저장된 loginMember 키값에 아이디를 가져와서 bvo에 할당
		MemberVO mvo=(MemberVO) map.get("mvoLogin");
		FreeBoardVO bvo=null;
		String id=mvo.getM_id();
		String name=mvo.getM_name();
		brvo.setM_id(id);
		brvo.setM_name(name);
		int bno1=brvo.getB_no();
		if(mvo.getM_type().equals("b")){
			brvo.setM_type("b");
		}else{
			brvo.setM_type("a");
		}
		try {
			freeBoardService.freeInsertReply(brvo);
			List list=freeBoardService.freeAllReply(bno1);
			request.setAttribute("list", list);
			bvo=freeBoardService.showContentNoCnt(bno1);
		} catch (SQLException e) {
			e.printStackTrace();
		}			
		return new ModelAndView("freeShowContent.board","bvo",bvo);
	}
	/**
	 * 리플삭제
	 */
	public ModelAndView freeDelReply(HttpServletRequest request,HttpServletResponse response, HttpSession session, BoardReplyVO brvo){
		System.out.println("free 리플삭제 실행");
		FreeBoardVO bvo=null;
		String board_no=request.getParameter("board_no");
		String bno=request.getParameter("b_no");
		int bno1=Integer.parseInt(bno);
		System.out.println("control delReply bno1:"+bno1);
		try {
			HashMap bmap=new HashMap();
			bmap.put("board_no", board_no);
			bmap.put("bno", bno1);
			System.out.println("control freeDelReply bmap"+bmap);
			freeBoardService.freeDelReply(bmap);
			bvo=freeBoardService.showContentNoCnt(bno1);
			System.out.println("control freeDelReply bvo"+bvo);
			List list=freeBoardService.freeAllReply(bno1);
			System.out.println("control freeDelReply list"+list);
			request.setAttribute("list", list);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return new ModelAndView("freeShowContent.board","bvo",bvo);
	}
	
	//free 페이지에서 관리자 접속시 select로 회원을 삭제할때
	public ModelAndView freeDeleteContentByAdmin(HttpServletRequest request,HttpServletResponse response) throws Exception{
		HashMap map=null;
		System.out.println("deleteContentByAdmin 실행!!!!!!!");
		ListVO lvo=null;
		String bno=request.getParameter("b_no");
		int no=Integer.parseInt(bno);
		freeBoardService.deleteContent(no);
		String pageNo=request.getParameter("pageNo");
		try {
			map=freeBoardService.freeAllList(pageNo);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	return new ModelAndView("freeBoard.board","map",map);
	}	
	
	
	
	
	
	
	
	
	////////////////////////////////////////////////////////////////////////////////////////
	
	// NoticeBoard부분 
	//공지사항write 페이지로 이동
		public ModelAndView noticeWriteMove(HttpServletRequest request,HttpServletResponse response){
			return new ModelAndView("noticeWrite.board");
		}
		//공지사항 글 작성하기
		public ModelAndView noticeWrite(HttpServletRequest request,HttpServletResponse response,HttpSession session,NoticeBoardVO vo){
			ListVO lvo=null;
			String pageNO="";
			HashMap map2=null;
			try {
				Map map=(Map) session.getAttribute("loginMember");
				MemberVO mvo=(MemberVO) map.get("mvoLogin");
				vo.setM_id(mvo.getM_id()); //로그인 한  id를 NoticeBoardVO 에  setting해줌.
				noticeBoardService.noticeWrite(vo);
				map2=noticeBoardService.noticeAllList("1"); //작성 후 첫번째 목록을 보여주기 위해 1페이지 리스트를 가져옴.
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return new ModelAndView("notice.board","map",map2);
		}
		//글 목록 보여주기
		public ModelAndView noticeAllList(HttpServletRequest request,HttpServletResponse response){
			//게시물 목록을 보여줄 페이지를 가져옴.
			String pageNO=request.getParameter("pageNo");
			ListVO lvo=null;
			HashMap map=null;
			try {
				map=noticeBoardService.noticeAllList(pageNO);
			} catch (SQLException e){ 
				e.printStackTrace();
			}
			return new ModelAndView("notice.board","map",map);
		}
		
		//게시판 글 상세사항 보여주기
		public ModelAndView noticeShowContent(HttpServletRequest request,HttpServletResponse response,HttpSession session){
			int b_no=Integer.parseInt(request.getParameter("b_no"));
			Map LoginMap=(Map) session.getAttribute("loginMember");
			if(LoginMap==null){ //로그인 안한사람이보기
				try {
					noticeBoardService.noticeContentCnt(b_no); //조회수 ++
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}else{ //로그인 한사람이 보기
				MemberVO vo=(MemberVO) LoginMap.get("mvoLogin");
				//관리자가 아닌 다른 사람이 볼경우 조회수 ++
				if(vo.getM_type().equals("b")){
					try {
						noticeBoardService.noticeContentCnt(b_no);
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}	
			}
				Map map=null;
				try {
					map=noticeBoardService.noticeShowContent(b_no);
				} catch (SQLException e) {
					e.printStackTrace();
				}
			return new ModelAndView("noticeShowContent.board","content",map);
		}
		//삭제하기
		public ModelAndView noticeDelete(HttpServletRequest request,HttpServletResponse response){
			String pageNO="";
			int b_no=Integer.parseInt(request.getParameter("b_no"));
			ListVO lvo=null;
			HashMap map=null;
			try {
				noticeBoardService.noticeDelete(b_no);
				map=noticeBoardService.noticeAllList(pageNO); //삭제 후 1번째 리스트를 보여주기 위해 다시 리스트를 가져옴.
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			return new ModelAndView("notice.board","map",map);
		}
		//update 페이지로 이동
		public ModelAndView noticeUpdatePage(HttpServletRequest request,HttpServletResponse response){
			int b_no=Integer.parseInt(request.getParameter("b_no"));
			Map map=null;
			try {
				//해당 글 넘버를 가지고 update할 내용을 가져옴.
				map=noticeBoardService.noticeUpdatePage(b_no);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return new ModelAndView("noticeUpdate.board","updateMap",map);
		}
		//update 하기
		public ModelAndView noticeUpdate(HttpServletRequest request,HttpServletResponse response,NoticeBoardVO vo){
			Map map=null;
			try {
				noticeBoardService.noticeUpdate(vo);
				map=noticeBoardService.noticeShowContent(vo.getB_no()); //수정 후 에 수정한 상세내용을 보여줌.
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return new ModelAndView("noticeShowContent.board","content",map);
		}
	////////////////////////////////////////////////////////////////////////////////////////
}
